

import wx
import wx.aui


class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        # 调用父类的构造函数，设置窗口标题和大小
        super(MyFrame, self).__init__(parent, title=title, size=(800, 600))

        # 创建一个面板，作为框架的内容窗口
        panel = wx.Panel(self)

        # 创建一个 AUI 笔记本（AuiNotebook），并设置样式
        notebook = wx.aui.AuiNotebook(panel,
                                      style=wx.aui.AUI_NB_TOP |  # 标签页在顶部
                                            wx.aui.AUI_NB_TAB_SPLIT |  # 允许标签页拆分
                                            wx.aui.AUI_NB_TAB_MOVE |  # 允许标签页移动
                                            wx.aui.AUI_NB_SCROLL_BUTTONS |  # 显示滚动按钮
                                            wx.aui.AUI_NB_TAB_EXTERNAL_MOVE  # 允许标签页外部移动
                                      )

        # 创建第一个页面，并添加一个静态文本
        page1 = wx.Panel(notebook)
        wx.StaticText(page1, label="这是页面1", pos=(10, 10))
        notebook.AddPage(page1, "页面1")  # 将页面1添加到笔记本中，并设置标签

        # 创建第二个页面，并添加一个静态文本
        page2 = wx.Panel(notebook)
        wx.StaticText(page2, label="这是页面2", pos=(10, 10))
        notebook.AddPage(page2, "页面2")  # 将页面2添加到笔记本中，并设置标签

        # 创建第三个页面，并添加一个静态文本
        page3 = wx.Panel(notebook)
        wx.StaticText(page3, label="这是页面3", pos=(10, 10))
        notebook.AddPage(page3, "页面3")  # 将页面3添加到笔记本中，并设置标签

        # 绑定关闭事件到 OnClose 方法
        self.Bind(wx.EVT_CLOSE, self.OnClose)

        # 创建一个垂直的 BoxSizer，用于管理面板的布局
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(notebook, 1, wx.EXPAND)  # 将笔记本添加到 sizer 中，并设置为扩展以填充可用空间

        # 设置面板的布局管理器
        panel.SetSizer(sizer)

        # 创建一个垂直的 BoxSizer，用于管理框架的布局
        self.SetSizer(wx.BoxSizer(wx.VERTICAL))
        self.GetSizer().Add(panel, 1, wx.EXPAND)  # 将面板添加到框架的 sizer 中，并设置为扩展以填充可用空间

        # 将窗口居中显示
        self.Centre()

    def OnClose(self, event):
        # 销毁窗口
        self.Destroy()


# 创建应用程序对象
app = wx.App(False)

# 创建主窗口对象，并显示
frame = MyFrame(None, 'AUI示例')
frame.Show(True)

# 进入应用程序主循环
app.MainLoop()